package seatiger.tomcat.coyote.http11;

import seatiger.tomcat.coyote.OutputBuffer;
import seatiger.tomcat.coyote.Response;
import seatiger.tomcat.util.buf.ByteChunk;

import java.io.IOException;

/**
 * 输出过滤器
 */
public interface OutputFilter extends OutputBuffer {

    /**
     * 写出一些字节
     * @param chunk
     * @param response
     * @return
     * @throws IOException
     */
    @Override
    int doWrite(ByteChunk chunk, Response response) throws IOException;

    /**
     * 关联Response 对象
     * @param response
     */
    void setResponse(Response response);

    /**
     * 重置
     */
    void recycle();

    /**
     * 设置下一个执行的buffer
     * @param buffer
     */
    void setBuffer(OutputBuffer buffer);

    /**
     * 结束当前的请求，在执行此方法中 可以使用doWrite 写出一些额外的字节
     * @return
     * @throws IOException
     */
    long end() throws IOException;
}
